#include "bsp_epit.h"
#include"bsp_int.h"
#include "bsp_led.h"
#include "bsp_beep.h"
/*
1、设置 EPIT1 的时钟源 
 设置寄存器 EPIT1_CR 寄存器的 CLKSRC(bit25:24)位，选择 EPIT1 的时钟源。 
 2、设置分频值 
 设置寄存器 EPIT1_CR 寄存器的 PRESCALAR(bit15:4)位，设置分频值。 
 3、设置工作模式 
 设置寄存器 EPIT1_CR 的 RLD(bit3)位，设置 EPTI1 的工作模式。 
 4、设置计数器的初始值来源 
 设置寄存器 EPIT1_CR 的 ENMOD(bit1)位，设置计数器的初始值来源。 
 5、使能比较中断 
 我们要使用到比较中断，因此需要设置寄存器 EPIT1_CR 的 OCIEN(bit2)位，使能比较中
断。 
 6、设置加载值和比较值 
 设置寄存器 EPIT1_LR 中的加载值和寄存器 EPIT1_CMPR 中的比较值，通过这两个寄存器
就可以决定定时器的中断周期。 
 7、EPIT1 中断设置和中断服务函数编写 
 使能 GIC 中对应的 EPIT1 中断，注册中断服务函数，如果需要的话还可以设置中断优先
级。最后编写中断服务函数。 
 8、使能 EPIT1 定时器 
 配置好 EPIT1 以后就可以使能 EPIT1 了，通过寄存器 EPIT1_CR 的 EN(bit0)位来设置。 
 通过以上几步我们就配置好 EPIT 了，通过 EPIT 的比较中断来实现 LED0 的翻转。
*/
void EPIT1_IRQnHandler(unsigned int giccIar, void *userParam)
{
    static uint8_t flag = 0;
    if(EPIT1->SR & 0x1)
    {
        flag = !flag;
        EPIT1->SR |= 1;
        EPIT1_OFF();
        if(flag)
            beep_ON();
        else
            beep_OFF();
    }
}
void EPIT1_Init(uint16_t fac,uint32_t value)
{
    EPIT1->CR =0;
    if(fac>=4096)
        fac=4095;
    EPIT1->CR |= (1<<24)|(1<<1)|(1<<2)|(1<<3)|(fac<<4)|(1<<17);
    EPIT1->LR=value;
    EPIT1->CMPR=0;

    GIC_EnableIRQ(EPIT1_IRQn);
    system_register_irqhandler(EPIT1_IRQn,EPIT1_IRQnHandler,NULL);
}
void EPIT1_OFF()
{
    EPIT1->CR &= ~(1<<0);
}
void EPIT1_ON()
{
    EPIT1->CR |= 1<<0;
}